嵌入式环境搭建

参考

  1. # 从零开始搭建qemu调试环境
  2. # 4.3.1 使用qemu进行arm64仿真

环境搭建

Pasted image 20230329094328.png

平台配置

搭建过程

详见参考

宿主机安装 vm

TODO

虚拟机安装 Ubuntu 22.04

TODO

ubuntu 配置环境

换源

直接将 /etc/apt/source.list 换为国内镜像源的链接,具体方式查看 清华镜像源换源

另一种更换方式

ubuntu 换源

将原 /etc/apt/sources.list 替换为 ustc 镜像源

cat > /etc/apt/sources.list << EOF
deb http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety-security main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety-updates main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ yakkety-backports main restricted universe multiverse
EOF

apt clean
apt update
安装常用软件
sudo apt update
sudo apt install gcc g++ cmake make gdb vim git openssh-server nfs-kernel-server
安装 qemu

详见

背景

更好的学习 linux 内核思想,做一个有想法的人。

注意:如果内核版本比较高时,需要选择比较高版本的 qemu,推荐使用源码方式安装。

安装编译器
# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz

# 解压
tar -Jxvf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz

# 移动至/opt
sudo mv gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu /opt

构建

编译 u-boot

export ARCH=arm64
export CROSS_COMPILE=/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

# u-boot
cd u-boot
make qemu_arm64_defconfig 
make -j16
cd -

编译 kernel

export ARCH=arm64
export CROSS_COMPILE=/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-


# linux
cd linux
make defconfig 
make -j16
cd -

编译 buildroot

export ARCH=arm64
export CROSS_COMPILE=/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

# buildroot
cd buildroot
make qemu_aarch64_virt_defconfig
make -j16
cd -

编译 atf

启动

cur_time=$(date +%Y-%m-%d-%H-%M-%S)
qemu-system-aarch64 \
     -M virt,gic_version=3\
     -cpu cortex-a53 \
     -smp 2 \
     -m 2048M \
     -kernel ./linux/arch/arm64/boot/Image \
     -drive file=./buildroot/output/images/rootfs.ext4,if=none,id=blk1,format=raw \
     -device virtio-blk-device,drive=blk1 \
     -append "console=ttyAMA0 root=/dev/vda" \
     -nographic -d guest_errors,unimp -D log/$cur_time 

过程中遇到的问题

  1. fakeroot: preload library libfakeroot.so not found, aborting
    1. 如果没有安装库,直接安装 sudo apt install fakeroot
    2. 移动了 buildroot 文件夹的路径,要先清理在编译 make clean && make -j$(nproc)
  2. /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
    1. 详见 https://blog.csdn.net/WM2014123/article/details/102984086
    2. 具体两种方式,如果本地有,则添加到搜索路径下;如果没有,直接安装